home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
lang_oth
/
forchek1
/
fortran.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-11-05
|
88KB
|
2,698 lines
# line 9 "fortran.y"
/*
fortran.c:
Copyright (C) 1991 by Robert K. Moniot.
This program is free software. Permission is granted to
modify it and/or redistribute it. There is no warranty
for this program.
This grammar is ANSI standard-conforming, except for:
-- Sensitive to whitespace, which is used in lexical analysis
to separate keywords and identifiers from context. This
is a design feature. Rules are the same as for Pascal.
(Of course stmt fields and end-of-line still honored.)
Note: a complex constant cannot be split across lines.
-- Currently, some keywords are partially reserved: may
only be used for scalar variables. (See keywords.c) This
is the fault of the lexical analyzer (too little lookahead).
Extensions supported:
-- Case insensitive.
-- Hollerith constants.
-- Variable names may be longer than 6 characters. Also
allows underscores in names.
-- DO ... ENDDO and DO WHILE loop forms allowed.
-- TYPE and ACCEPT I/O statements allowed.
-- Tabs are permitted in input, and (except in character data)
expand into blanks up to the next column equal to 1 mod 8.
-- Type declarations INTEGER*2, REAL*8, etc. are allowed.
REAL*8 becomes DOUBLE PRECISION. For others, length spec
is ignored.
-- IMPLICIT NONE allowed.
*/
/* Author: R. Moniot
* Date: August 1988
* Last revision: June 1991
*/
#include <stdio.h>
#include <string.h>
#include "forchek.h"
#include "symtab.h"
void exit();
int current_datatype, /* set when parse type_name or type_stmt */
stmt_sequence_no, /* set when parsing, reset to 0 at end_stmt */
control_item_count; /* count of items in control_info_list */
int current_module_hash = -1, /* hashtable index of current module name */
current_module_type,
executable_stmt=FALSE,
prev_stmt_class=0,
/* flags for lexer */
complex_const_allowed=FALSE, /* for help in lookahead for these */
inside_format=FALSE, /* when inside parens of FORMAT */
integer_context=FALSE, /* says integers-only are to follow */
prev_goto=FALSE,
goto_flag=FALSE; /* if unconditional GOTO was encountered */
long exec_stmt_count=0; /* count of executable stmts in program */
PRIVATE void
print_comlist(), print_exprlist(), END_processing();
PRIVATE Token *
append_token();
/* Uses of Token fields for nonterminals: */
/*
1. dim_bound_lists: dimensioning info for arrays:
token.class = no. of dimensions,
token.subclass = no. of elements
2. expressions
token.class = type_byte = storage_class << 4 + datatype
token.subclass = flags: CONST_EXPR, LVALUE_EXPR, etc.
3. common variable lists
token.subclass = flag: COMMA_FLAG used to handle extra/missing commas
*/
#define seq_header 1
#define seq_implicit 2
#define seq_specif 3
#define seq_stmt_fun 4
#define seq_exec 5
#define seq_end 6
#define DBG(S) if(debug_parser) fprintf(list_fd,"\nproduction: S");
#define DBGstr(S,str) \
if(debug_parser) fprintf(list_fd,"\nproduction: S%s",str);
# define tok_identifier 257
# define tok_label 258
# define tok_integer_const 259
# define tok_real_const 260
# define tok_dp_const 261
# define tok_complex_const 262
# define tok_logical_const 263
# define tok_string 264
# define tok_hollerith 265
# define tok_edit_descriptor 266
# define tok_letter 267
# define tok_relop 268
# define tok_AND 269
# define tok_OR 270
# define tok_EQV 271
# define tok_NEQV 272
# define tok_NOT 273
# define tok_power 274
# define tok_concat 275
# define tok_ASSIGN 276
# define tok_ACCEPT 277
# define tok_BACKSPACE 278
# define tok_BLOCK 279
# define tok_CALL 280
# define tok_CHARACTER 281
# define tok_CLOSE 282
# define tok_COMMON 283
# define tok_COMPLEX 284
# define tok_CONTINUE 285
# define tok_DATA 286
# define tok_DIMENSION 287
# define tok_DO 288
# define tok_DOUBLE 289
# define tok_DOWHILE 290
# define tok_ELSE 291
# define tok_ELSEIF 292
# define tok_END 293
# define tok_ENDDO 294
# define tok_ENDFILE 295
# define tok_ENDIF 296
# define tok_ENTRY 297
# define tok_EQUIVALENCE 298
# define tok_EXTERNAL 299
# define tok_FORMAT 300
# define tok_FUNCTION 301
# define tok_GO 302
# define tok_GOTO 303
# define tok_IF 304
# define tok_IMPLICIT 305
# define tok_INCLUDE 306
# define tok_INQUIRE 307
# define tok_INTEGER 308
# define tok_INTRINSIC 309
# define tok_LOGICAL 310
# define tok_OPEN 311
# define tok_PARAMETER 312
# define tok_PAUSE 313
# define tok_PRECISION 314
# define tok_PRINT 315
# define tok_PROGRAM 316
# define tok_READ 317
# define tok_REAL 318
# define tok_RETURN 319
# define tok_REWIND 320
# define tok_SAVE 321
# define tok_STOP 322
# define tok_SUBROUTINE 323
# define tok_TO 324
# define tok_TYPE 325
# define tok_THEN 326
# define tok_WHILE 327
# define tok_WRITE 328
# define tok_illegal 329
# define EOS 127
# define REDUCE 331
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern int yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
#ifndef YYSTYPE
#define YYSTYPE int
#endif
YYSTYPE yylval, yyval;
typedef int yytabelem;
# define YYERRCODE 256
# line 2197 "fortran.y"
void
init_parser() /* Initialize various flags & counters */
{
initial_flag = TRUE; /* set flag for keyword test */
implicit_flag=FALSE; /* clear flags for IMPLICIT stmt */
implicit_letter_flag = FALSE;
implicit_type_given = FALSE;
implicit_none = FALSE;
prev_token_class = EOS;
complex_const_allowed = FALSE;
stmt_sequence_no = 0;
}
/* Debugging routine: prints the expression list of various productions */
PRIVATE void
print_exprlist(s,t)
char *s;
Token *t;
{
fprintf(list_fd,"\n%s arglist: ",s);
if(t == NULL)
fprintf(list_fd,"(empty)");
else {
while( (t=t->next_token) != NULL) {
fprintf(list_fd,"%s ",type_name[datatype_of(t->class)]);
if( is_true(ID_EXPR,t->subclass) )
fprintf(list_fd,"(%s) ",token_name(*t));
}
}
}
PRIVATE void
print_comlist(s,t)
char *s;
Token *t;
{
fprintf(list_fd,"\n%s varlist: ",s);
if(t == NULL)
fprintf(list_fd,"(empty)");
else {
while( (t=t->next_token) != NULL) {
fprintf(list_fd,"%s ",type_name[datatype_of(t->class)]);
if( is_true(ID_EXPR,t->subclass) )
fprintf(list_fd,"(%s) ",token_name(*t));
}
}
}
/* After having parsed prog_stmt, function_stmt, subroutine_stmt,
block_data_stmt, the stmt_sequence_no is set to the value seq_header.
*/
void
check_seq_header(t)
Token *t;
{
if(stmt_sequence_no >= seq_header) {
syntax_error( (t == (Token *) NULL? line_num: t->line_num),
NO_COL_NUM,
"missing END statement inserted");
msg_tail( (t == (Token *) NULL? "at end of file":
"prior to statement") );
END_processing(t);
}
stmt_sequence_no = seq_header;
}
/* After having parsed end_stmt, common block lists and
subprogram argument lists are copied over into global symbol
table, the local symbol table is printed out and then cleared,
and stmt_sequence_no is set to zero for start of next module.
*/
PRIVATE void
END_processing(t)
Token *t;
{
if(current_module_hash != -1) {
if(exec_stmt_count == 0 &&
current_module_type != type_BLOCK_DATA) {
warning(t == (Token *)NULL? line_num: t->line_num, NO_COL_NUM,
"Module contains no executable statements");
}
if(do_list && t != (Token *)NULL)
flush_line_out(t->line_num);
process_lists(current_module_hash);
debug_symtabs();
print_loc_symbols(current_module_hash);
init_symtab();
}
exec_stmt_count = 0;
stmt_sequence_no = 0;
current_module_hash = -1;
implicit_type_given = FALSE;
implicit_none = FALSE;
}
/* Routine to add token t to the front of a token list. */
PRIVATE Token *
append_token(tlist,t)
Token *tlist, *t;
{
Token *tcopy;
if((tcopy=new_token()) == (Token *)NULL){
fprintf(stderr,
"Out of token space at line %u\n",
line_num);
exit(1);
}
*tcopy = *t; /* make permanent copy of token */
tcopy->next_token = tlist; /* link it onto front of list */
return tcopy; /* return it as new tlist */
}
yytabelem yyexca[] ={
-1, 1,
0, -1,
-2, 0,
-1, 504,
268, 0,
-2, 354,
-1, 570,
42, 201,
-2, 203,
-1, 578,
42, 405,
-2, 375,
};
# define YYNPROD 407
# define YYLAST 1247
yytabelem yyact[]={
246, 473, 524, 523, 224, 563, 136, 268, 340, 567,
235, 566, 427, 457, 463, 464, 458, 442, 543, 357,
439, 236, 541, 367, 356, 77, 369, 374, 76, 75,
154, 437, 247, 304, 221, 115, 128, 115, 365, 242,
220, 197, 250, 115, 244, 172, 173, 338, 137, 243,
703, 181, 208, 354, 186, 288, 162, 81, 177, 241,
294, 293, 316, 143, 271, 282, 386, 178, 114, 178,
372, 133, 387, 148, 149, 178, 135, 178, 388, 168,
687, 176, 182, 187, 187, 192, 194, 198, 160, 116,
205, 564, 164, 213, 213, 131, 158, 134, 339, 157,
156, 269, 201, 203, 206, 132, 115, 155, 396, 372,
382, 383, 141, 153, 279, 280, 281, 546, 276, 115,
254, 258, 260, 137, 165, 212, 202, 641, 312, 163,
214, 167, 341, 291, 183, 188, 188, 114, 204, 275,
133, 199, 237, 285, 286, 135, 574, 292, 573, 325,
147, 199, 137, 298, 441, 468, 171, 328, 305, 228,
229, 230, 231, 170, 131, 333, 134, 708, 705, 679,
702, 701, 425, 381, 132, 698, 633, 176, 165, 697,
625, 381, 176, 696, 190, 332, 359, 423, 381, 621,
360, 491, 683, 682, 115, 681, 421, 187, 680, 675,
319, 381, 185, 337, 579, 674, 352, 137, 462, 202,
400, 310, 301, 398, 673, 672, 327, 163, 329, 377,
664, 195, 662, 368, 145, 582, 82, 89, 124, 206,
126, 560, 97, 371, 184, 85, 256, 256, 256, 492,
144, 120, 351, 349, 661, 125, 347, 337, 311, 188,
375, 384, 119, 118, 120, 317, 699, 98, 318, 424,
637, 96, 368, 87, 667, 91, 368, 121, 368, 100,
123, 607, 86, 358, 422, 92, 208, 137, 122, 137,
137, 394, 395, 420, 605, 429, 477, 688, 432, 635,
389, 461, 426, 399, 402, 179, 397, 179, 404, 300,
406, 622, 376, 179, 617, 179, 613, 612, 440, 611,
557, 593, 189, 558, 546, 685, 370, 341, 542, 550,
497, 553, 451, 460, 436, 350, 348, 326, 168, 346,
344, 465, 555, 415, 548, 410, 405, 403, 176, 331,
474, 137, 182, 547, 187, 401, 379, 115, 337, 115,
319, 137, 364, 363, 478, 137, 479, 202, 198, 366,
137, 137, 228, 229, 230, 231, 575, 576, 577, 137,
163, 450, 163, 329, 429, 137, 378, 327, 452, 335,
455, 488, 493, 385, 486, 362, 495, 470, 496, 483,
475, 476, 471, 480, 183, 137, 188, 137, 366, 382,
383, 448, 366, 498, 366, 317, 382, 383, 318, 413,
382, 383, 321, 494, 368, 368, 368, 137, 525, 382,
383, 382, 383, 505, 506, 345, 502, 431, 440, 533,
440, 336, 440, 504, 521, 507, 508, 503, 355, 509,
308, 368, 499, 500, 307, 299, 515, 516, 517, 297,
296, 305, 295, 528, 572, 529, 570, 530, 571, 557,
278, 274, 334, 546, 540, 210, 142, 542, 550, 211,
553, 84, 158, 537, 417, 157, 156, 561, 559, 200,
373, 555, 14, 155, 393, 269, 481, 57, 314, 392,
469, 313, 594, 588, 589, 320, 482, 368, 646, 240,
601, 669, 249, 602, 248, 596, 684, 390, 390, 391,
391, 390, 598, 391, 603, 251, 431, 694, 710, 604,
585, 609, 610, 498, 217, 704, 534, 306, 629, 693,
390, 548, 391, 549, 665, 631, 608, 485, 551, 552,
547, 644, 634, 381, 645, 490, 440, 648, 623, 554,
256, 256, 256, 599, 586, 616, 209, 215, 490, 522,
636, 539, 527, 639, 640, 638, 535, 207, 501, 233,
411, 414, 249, 272, 248, 453, 536, 256, 650, 651,
474, 653, 460, 460, 7, 435, 600, 361, 429, 270,
465, 615, 465, 465, 490, 654, 269, 431, 657, 655,
660, 658, 659, 663, 218, 218, 614, 218, 218, 490,
330, 649, 597, 668, 232, 485, 252, 253, 584, 666,
580, 585, 519, 581, 525, 520, 678, 514, 513, 512,
490, 490, 490, 256, 489, 256, 484, 490, 443, 485,
676, 444, 322, 233, 342, 707, 249, 343, 248, 185,
283, 686, 695, 572, 572, 570, 691, 571, 692, 690,
689, 428, 233, 619, 620, 249, 628, 248, 557, 624,
525, 627, 546, 700, 626, 606, 591, 550, 632, 553,
548, 590, 549, 538, 531, 287, 587, 551, 552, 547,
555, 583, 487, 454, 474, 706, 434, 233, 554, 257,
249, 418, 248, 643, 409, 525, 408, 709, 407, 373,
322, 474, 711, 16, 137, 8, 137, 324, 228, 229,
230, 231, 227, 225, 226, 309, 261, 302, 257, 249,
431, 248, 245, 82, 89, 124, 110, 126, 114, 97,
74, 133, 85, 71, 72, 127, 135, 105, 101, 102,
17, 106, 125, 103, 67, 73, 78, 68, 129, 119,
118, 120, 111, 11, 98, 131, 79, 134, 96, 69,
87, 289, 91, 63, 121, 132, 100, 123, 80, 86,
130, 284, 92, 16, 137, 122, 137, 277, 228, 229,
230, 231, 227, 225, 226, 259, 273, 257, 249, 266,
248, 151, 245, 82, 89, 124, 110, 126, 114, 97,
74, 133, 85, 71, 72, 127, 135, 105, 101, 102,
17, 106, 125, 103, 67, 73, 78, 68, 129, 119,
118, 120, 111, 233, 98, 131, 79, 134, 96, 69,
87, 430, 91, 63, 121, 132, 100, 123, 80, 86,
130, 255, 92, 257, 249, 122, 248, 223, 222, 239,
137, 10, 228, 229, 230, 231, 227, 225, 226, 240,
140, 9, 249, 618, 248, 3, 245, 412, 138, 137,
139, 228, 229, 230, 231, 227, 225, 226, 518, 548,
574, 549, 573, 265, 99, 245, 551, 552, 547, 233,
556, 545, 249, 544, 248, 150, 93, 554, 95, 94,
264, 263, 262, 238, 137, 671, 228, 229, 230, 231,
227, 225, 226, 233, 511, 656, 249, 670, 248, 510,
245, 88, 233, 290, 459, 249, 380, 248, 234, 90,
419, 526, 233, 137, 219, 228, 229, 230, 231, 227,
225, 226, 233, 630, 104, 249, 677, 248, 416, 245,
433, 233, 83, 117, 249, 595, 248, 592, 353, 652,
233, 532, 315, 249, 569, 248, 568, 647, 565, 233,
449, 472, 249, 161, 248, 159, 196, 193, 233, 191,
642, 249, 445, 248, 303, 562, 447, 446, 233, 152,
70, 249, 113, 248, 112, 180, 428, 174, 233, 175,
467, 249, 137, 248, 228, 229, 230, 231, 227, 225,
226, 216, 466, 219, 323, 169, 456, 166, 245, 66,
438, 109, 65, 108, 107, 64, 146, 62, 61, 60,
59, 58, 56, 55, 54, 53, 52, 51, 50, 49,
137, 48, 228, 229, 230, 231, 227, 225, 226, 47,
46, 45, 44, 43, 42, 41, 40, 39, 137, 38,
228, 229, 230, 231, 227, 225, 226, 37, 36, 35,
34, 33, 32, 31, 245, 267, 137, 30, 228, 229,
230, 231, 227, 225, 226, 29, 28, 27, 26, 25,
24, 23, 245, 22, 137, 21, 578, 229, 230, 231,
575, 576, 577, 20, 19, 18, 137, 15, 228, 229,
230, 231, 227, 225, 226, 13, 12, 6, 5, 4,
2, 1, 245, 0, 0, 0, 0, 0, 0, 0,
137, 0, 228, 229, 230, 231, 227, 225, 226, 137,
0, 228, 229, 230, 231, 227, 225, 226, 0, 137,
0, 228, 229, 230, 231, 227, 225, 226, 0, 137,
0, 228, 229, 230, 231, 227, 225, 226, 137, 0,
228, 229, 230, 231, 227, 225, 226, 137, 0, 228,
229, 230, 231, 227, 225, 226, 137, 0, 228, 229,
230, 231, 227, 225, 226, 137, 0, 228, 229, 230,
231, 227, 225, 226, 0, 137, 0, 228, 229, 230,
231, 227, 225, 226, 0, 137, 0, 228, 229, 230,
231, 227, 225, 226, 0, 0, 0, 0, 137, 0,
228, 229, 230, 231, 227, 225, 226 };
yytabelem yypact[]={
457, -1000, 457, -1000, -1000, -1000, -1000, -1000, 527, -1000,
-1000, -152, -1000, -1000, -1000, -1000, 339, -64, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, 23, -105, -1000, 761,
-144, 138, -105, -1000, 20, -105, 160, 140, -105, -105,
94, 418, -133, 98, -50, 338, -134, -134, 981, 902,
829, 902, 902, 811, 755, 686, -1000, -1000, -1000, 759,
958, -63, 756, 334, -209, 747, 333, -105, -105, -105,
-221, -1000, 608, -1000, -1000, 741, 645, -1000, -1000, -269,
731, -1000, -1000, -1000, -1000, -1000, -105, -133, -240, -1000,
-1000, -1000, -1000, -1000, -1000, -254, -1000, -1000, -1000, -1000,
-1000, 325, -1000, -1000, 323, 322, -105, -1000, 318, 172,
687, -105, 400, 313, -1000, 685, -1000, 607, -1000, 84,
-1000, 444, -1000, -1000, -1000, 138, 368, -1000, 670, 677,
22, 30, -1000, -1000, 566, -105, 670, -1000, 118, -1000,
335, -1000, 670, -1000, 304, 58, -1000, 602, 605, 203,
-105, 202, -1000, 199, -1000, -1000, 198, -1000, -1000, -105,
-1000, -271, -1000, 311, -133, 146, 543, -1000, 258, -133,
-1000, 226, -1000, -1000, -1000, 225, 657, 189, -205, -1000,
-1000, 669, 645, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, 175, 859, 219, 499, -1000, -161, -1000, -1000,
829, -204, -197, -1000, -190, 968, 464, 442, 793, 793,
-1000, -166, 169, 166, 218, 657, -161, -1000, 210, 657,
209, 657, 668, 666, 664, 208, 529, -1000, 206, 464,
-1000, -1000, -274, -1000, -1000, 413, 661, -1000, -1000, 156,
147, 132, -1000, -127, 603, -1000, -1000, 948, -1000, -1000,
656, -1000, 541, -1000, -1000, -1000, -1000, -1000, 197, -1000,
-1000, 112, -1000, 597, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, 138, -1000, 138, 138, 531, -1000, -1000, 653,
-1000, -105, 892, 164, -105, -1000, 28, -1000, -1000, -1000,
-1000, -105, 443, -1000, -1000, -105, -1000, -105, -1000, 939,
-1000, -1000, 58, 58, -1000, 159, -1000, -105, -1000, -105,
-1000, 104, 439, 859, -105, -1000, 595, -1000, -1000, -133,
652, -133, -1000, -1000, -1000, 593, -161, -1000, 178, -1000,
-1000, 829, 793, 603, -1000, -1000, -1000, 829, 150, -1000,
193, 829, 859, 859, 524, 150, 859, 859, 968, -190,
793, 793, 793, 793, 442, 442, 793, -1000, -1000, -1000,
-1000, -1000, 588, -1000, 587, -1000, 586, 657, 657, 657,
-1000, -1000, 581, -161, -133, -1000, 859, 968, -1000, 859,
-1000, 112, -1000, 112, -1000, 112, -1000, 643, 930, 468,
522, -161, 468, 859, 657, -1000, -1000, 642, 517, -1000,
-1000, -1000, 423, 186, -105, 170, -213, -176, -1000, 847,
-1000, 143, -1000, -1000, 859, -1000, 579, -1000, 167, -1000,
464, -1000, 651, 577, 510, 646, 645, -1000, -1000, -1000,
-1000, -1000, 640, 635, 464, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -161, 184, 921, -133, 571, -133, 509, 459,
657, -1000, 657, 157, -1000, 634, 144, -1000, -1000, -204,
-204, 829, -197, -1000, -1000, 442, 442, -1000, -1000, -1000,
829, 829, 182, 180, 179, 565, 550, 514, 177, -1000,
622, -1000, 148, 174, 504, 464, 859, 139, 633, 630,
625, -1000, -1000, 487, 912, 859, 135, 501, 162, 112,
133, -1000, 632, -1000, 77, -1000, -1000, -1000, -1000, -1000,
-132, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
859, -1000, 500, -1000, 453, 503, -1000, -1000, 569, -1000,
-1000, -1000, -1000, -100, -100, -1000, -1000, -1000, -1000, 968,
-1000, 892, 883, -105, -1000, -105, -105, 603, -1000, -1000,
-1000, -1000, 117, -1000, 95, 968, -1000, 93, 493, -133,
-1000, 137, 829, -1000, -1000, -1000, -1000, -1000, 440, 499,
499, -1000, -1000, -1000, 88, 87, 78, -1000, 72, -161,
-133, -1000, -1000, 968, 128, 71, 68, 66, 65, -1000,
-1000, 465, -161, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
274, -1000, -1000, -161, -1000, -176, -187, 240, 847, 103,
-1000, -1000, 617, 485, -1000, -1000, -1000, 476, -1000, -1000,
611, -1000, -1000, 56, -1000, 52, 48, -1000, 129, 968,
44, 43, -1000, -1000, -1000, -1000, -1000, -276, 481, 41,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, 968, -1000, -1000, -1000, -1000, -1000, -1000,
604, -1000, -1000, 40, 968, -1000, 474, -1000, -1000, -1000,
968, -1000 };
yytabelem yypgo[]={
0, 1131, 1130, 875, 1129, 1128, 1127, 871, 1126, 1125,
482, 1117, 1115, 1114, 1113, 1105, 861, 1103, 1101, 1100,
1099, 1098, 1097, 1096, 1095, 1087, 1083, 1082, 1081, 1080,
1079, 1078, 1077, 1069, 1067, 1066, 1065, 1064, 1063, 1062,
1061, 1060, 1059, 1051, 1049, 1048, 1047, 1046, 1045, 1044,
1043, 1042, 487, 1041, 1040, 1039, 1038, 1037, 1036, 6,
31, 1035, 1034, 1033, 36, 29, 28, 25, 1032, 1031,
1030, 20, 1029, 1027, 58, 1026, 13, 16, 1025, 1024,
14, 15, 1022, 1010, 12, 27, 163, 156, 46, 1009,
45, 1007, 1005, 234, 1004, 8, 1002, 47, 51, 54,
1000, 999, 30, 997, 996, 995, 5, 1, 994, 33,
992, 990, 989, 987, 986, 41, 985, 88, 983, 980,
978, 977, 56, 57, 92, 11, 9, 976, 974, 972,
969, 62, 89, 968, 142, 967, 34, 963, 19, 962,
24, 7, 471, 960, 958, 956, 954, 3, 941, 940,
2, 469, 939, 938, 10, 936, 933, 38, 931, 524,
929, 927, 924, 915, 23, 26, 21, 913, 912, 911,
910, 909, 908, 906, 515, 905, 17, 22, 18, 903,
901, 900, 894, 893, 888, 877, 873, 859, 59, 39,
49, 44, 0, 32, 42, 40, 858, 857, 4, 841 };
yytabelem yyr1[]={
0, 1, 1, 2, 2, 3, 3, 3, 3, 4,
4, 7, 7, 7, 7, 7, 8, 8, 8, 8,
5, 5, 16, 6, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 11, 11,
11, 11, 11, 11, 11, 58, 12, 17, 17, 13,
61, 61, 61, 61, 62, 63, 64, 64, 64, 14,
68, 68, 69, 60, 60, 70, 70, 71, 71, 15,
15, 72, 22, 73, 73, 74, 75, 75, 76, 76,
76, 76, 78, 23, 79, 79, 80, 80, 81, 81,
81, 82, 83, 83, 24, 24, 24, 87, 87, 88,
89, 89, 89, 86, 86, 90, 90, 91, 91, 25,
25, 25, 25, 65, 65, 65, 94, 94, 94, 94,
96, 66, 67, 92, 92, 98, 98, 93, 93, 99,
99, 99, 99, 100, 20, 20, 101, 103, 101, 104,
102, 105, 105, 106, 106, 97, 97, 97, 19, 108,
108, 110, 109, 26, 112, 112, 27, 113, 113, 28,
28, 114, 114, 115, 115, 21, 116, 116, 116, 119,
121, 117, 118, 118, 122, 122, 120, 120, 125, 125,
127, 127, 126, 126, 124, 130, 130, 129, 129, 131,
131, 133, 135, 29, 123, 123, 123, 30, 31, 32,
32, 33, 33, 33, 139, 139, 140, 140, 34, 51,
52, 143, 142, 53, 144, 145, 53, 54, 55, 55,
56, 148, 56, 149, 56, 146, 146, 146, 147, 147,
57, 57, 35, 36, 37, 151, 151, 151, 151, 153,
40, 155, 40, 156, 152, 38, 38, 38, 38, 38,
158, 39, 39, 41, 160, 161, 41, 42, 162, 163,
42, 157, 157, 164, 164, 154, 154, 166, 166, 167,
168, 46, 169, 47, 170, 48, 44, 44, 171, 45,
45, 172, 43, 43, 173, 165, 165, 159, 159, 175,
18, 176, 176, 176, 177, 177, 177, 178, 178, 178,
180, 180, 180, 180, 180, 180, 181, 179, 179, 183,
49, 184, 49, 186, 49, 182, 185, 185, 185, 185,
50, 50, 111, 134, 187, 187, 187, 188, 188, 189,
189, 190, 190, 191, 191, 192, 192, 192, 192, 192,
193, 193, 193, 194, 194, 174, 174, 195, 195, 195,
195, 195, 195, 195, 195, 198, 198, 198, 198, 141,
150, 107, 77, 132, 196, 84, 84, 199, 199, 197,
197, 137, 137, 85, 85, 85, 85, 136, 59, 128,
128, 128, 128, 128, 128, 95, 138 };
yytabelem yyr2[]={
0, 2, 0, 2, 4, 3, 3, 2, 2, 5,
3, 3, 3, 3, 3, 5, 3, 3, 3, 3,
2, 4, 4, 7, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 1, 9, 7, 13, 2,
7, 13, 7, 13, 5, 3, 2, 2, 2, 2,
7, 13, 3, 1, 2, 3, 7, 3, 3, 4,
7, 5, 6, 2, 6, 9, 3, 7, 3, 7,
3, 7, 1, 9, 6, 10, 7, 7, 3, 3,
3, 8, 4, 4, 7, 7, 9, 3, 5, 5,
7, 5, 3, 3, 5, 3, 5, 3, 3, 6,
6, 6, 8, 2, 7, 2, 3, 3, 3, 3,
5, 3, 7, 2, 6, 3, 3, 2, 6, 3,
7, 3, 7, 3, 7, 7, 2, 1, 8, 1,
11, 2, 6, 3, 7, 6, 2, 6, 10, 2,
6, 1, 9, 6, 3, 7, 6, 3, 7, 4,
6, 2, 6, 3, 7, 6, 2, 4, 6, 1,
1, 12, 2, 6, 3, 2, 2, 6, 2, 6,
2, 3, 2, 3, 13, 6, 10, 4, 4, 3,
2, 1, 1, 13, 2, 2, 2, 11, 6, 12,
14, 7, 13, 15, 2, 4, 2, 6, 14, 4,
6, 1, 11, 4, 1, 1, 16, 4, 4, 6,
11, 1, 15, 1, 13, 4, 6, 3, 6, 10,
7, 5, 4, 6, 6, 0, 2, 3, 2, 1,
6, 1, 8, 1, 11, 10, 12, 14, 6, 10,
3, 7, 11, 6, 1, 1, 14, 7, 1, 1,
15, 3, 7, 7, 3, 2, 6, 3, 2, 15,
1, 12, 1, 12, 1, 12, 6, 10, 3, 6,
10, 3, 6, 10, 3, 2, 2, 3, 2, 1,
13, 0, 4, 6, 2, 4, 2, 6, 2, 2,
2, 2, 2, 2, 2, 3, 2, 2, 4, 1,
6, 1, 10, 1, 12, 5, 3, 5, 7, 9,
5, 7, 3, 3, 2, 7, 7, 2, 7, 2,
7, 2, 5, 2, 7, 2, 5, 5, 7, 7,
2, 7, 7, 2, 7, 2, 7, 3, 2, 2,
3, 3, 3, 3, 7, 3, 3, 3, 3, 3,
3, 3, 3, 9, 9, 1, 2, 3, 7, 4,
4, 4, 4, 6, 9, 9, 11, 3, 2, 2,
4, 4, 2, 2, 2, 2, 3 };
yytabelem yychk[]={
-1000, -1, -2, -3, -4, -5, -6, 127, 258, -7,
-16, 306, -8, -9, -10, -11, 256, 293, -12, -13,
-14, -15, -17, -18, -19, -20, -21, -22, -23, -24,
-25, -26, -27, -28, -29, -30, -31, -32, -33, -34,
-35, -36, -37, -38, -39, -40, -41, -42, -43, -44,
-45, -46, -47, -48, -49, -50, -51, -52, -53, -54,
-55, -56, -57, 316, -61, -68, -72, 297, 300, 312,
-100, 286, 287, 298, 283, -65, -66, -67, 299, 309,
321, -123, 276, -139, -142, 285, 322, 313, -158, 277,
-152, 315, 325, -173, -171, -172, 311, 282, 307, -182,
319, 291, 292, 296, -146, 290, 294, -62, -63, -69,
279, 305, -94, -96, 281, -136, -132, -137, 303, 302,
304, 317, 328, 320, 278, 295, 280, 288, -64, 301,
323, 308, 318, 284, 310, 289, -59, 257, -3, -7,
-16, 264, 127, 127, 304, 288, -58, 127, -59, -59,
-175, 40, -101, 257, -102, -64, -65, -66, -67, -116,
-117, -118, -122, -123, -124, 40, -73, -74, -59, -78,
-86, -87, -90, -88, -91, -89, -59, -74, 47, 275,
-92, -98, -59, -74, -93, 42, -99, -59, -74, -93,
44, -112, -59, -113, -59, 127, -114, -115, -59, 47,
61, -138, 259, -138, 40, -59, -138, -10, 326, -142,
127, -151, 259, -59, 264, -151, 40, -159, -174, 42,
-195, -136, -196, -197, -198, 264, 265, 263, 259, 260,
261, 262, -159, 40, -153, -154, -166, -134, -167, -187,
40, -188, -189, -190, -191, 273, -192, -193, 45, 43,
-194, -174, -159, -159, -165, 40, -134, 42, -165, 40,
-165, 40, -168, -169, -170, -183, 40, 127, -141, -192,
-52, 127, -142, 40, 127, -136, 327, 40, 127, -59,
-59, -59, 286, 42, 40, -85, -85, 40, 324, 40,
-156, -59, -138, 301, 314, 127, 127, 127, -59, 127,
127, 40, 40, -108, -109, -59, 127, 44, 127, 40,
127, -117, 44, 47, 44, -129, -131, -132, -124, -136,
127, 44, 40, -79, 40, 127, -87, -90, 127, -88,
44, -86, -59, 47, 127, 44, 127, 44, -97, 40,
-95, 259, 42, 42, 127, -93, 127, 44, 127, 44,
127, 44, -59, -133, 324, 127, -140, -138, 127, 40,
44, 44, 127, 127, 127, -157, -134, -164, -59, -165,
127, 44, 275, 40, -85, -85, 127, 44, -134, 127,
-155, 44, 271, 272, -154, -134, 270, 269, 268, -191,
43, 45, 47, 42, -193, -193, 274, 127, 44, 127,
44, 127, -157, 127, -157, 127, -157, 40, 40, 40,
127, 41, -185, -134, 42, 127, -144, 61, 40, -149,
127, 40, 127, 40, 127, 40, -95, -84, 58, -192,
-199, -134, -192, -143, 40, 44, 127, -60, -70, -71,
-59, 42, -176, 41, 44, -110, -103, -104, -117, -119,
-122, -59, -131, 44, 40, -74, -75, -76, -77, 42,
-192, 127, 44, -80, -81, -59, -82, -83, 127, 47,
-98, -99, 42, -107, -192, -97, -97, 127, -59, -59,
-115, 47, -134, -136, 41, 44, -140, 40, -138, 41,
44, 41, 61, -154, -195, -84, -154, 127, -166, -188,
-188, 44, -189, -190, -191, -193, -193, -194, -194, -194,
-160, -162, 41, 41, 41, -157, -157, -157, -184, 41,
44, -138, -134, -147, -150, -192, -148, -134, -60, -60,
-60, 41, 41, -192, 58, 44, -134, -157, 41, 44,
41, -177, 44, -178, -179, -180, 40, 266, 257, 259,
45, 264, 265, 47, 275, 58, -181, 36, 127, -109,
61, -102, -105, -106, 267, -120, -125, -126, -127, -128,
-59, -95, -198, 45, 43, 263, 264, 265, 259, 61,
41, 44, 58, 40, 41, 44, 44, 40, -85, -85,
41, 41, -135, 127, -141, 44, -138, 41, -140, 44,
127, -154, 44, -164, -165, 127, 41, 127, -136, -154,
-154, 127, 127, 127, 41, 41, 41, 127, -186, -134,
42, 41, 127, 44, -134, 41, 41, 41, 41, 41,
41, -192, -134, 41, 41, 127, -71, 127, -177, -178,
-176, 259, -111, -134, 41, 44, 45, -121, 44, 42,
-198, -198, -130, -107, -76, -77, 42, -80, -81, -81,
-84, 127, 127, -141, 127, 41, -138, 127, -154, 61,
-161, -163, 127, 127, 127, 127, -138, -145, -150, 41,
127, 127, 127, 127, 41, 41, -106, 267, 47, -125,
-126, -59, 41, 44, 41, 41, 127, 127, 127, 127,
-147, 127, 127, 326, 44, 127, -107, 41, 127, -150,
44, -107 };
yytabelem yydef[]={
2, -2, 1, 3, 5, 6, 7, 8, 0, 10,
20, 0, 11, 12, 13, 14, 0, 0, 16, 17,
18, 19, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 69, 79, 0, 0, 309, 0,
0, 0, 0, 102, 0, 76, 77, 78, 0, 0,
0, 0, 0, 0, 0, 0, 255, 255, 0, 0,
259, 0, 0, 0, 0, 0, 290, 292, 294, 329,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 153, 133, 135, 141, 214, 215, 216, 224, 0,
0, 270, 263, 304, 298, 301, 0, 247, 0, 75,
82, 136, 137, 138, 139, 0, 397, 398, 4, 9,
21, 0, 15, 22, 0, 0, 0, 89, 0, 0,
0, 0, 0, 0, 156, 0, 76, 77, 78, 0,
186, 0, 192, 194, 195, 0, 0, 93, 0, 0,
0, 0, 123, 117, 125, 0, 127, 128, 0, 122,
0, 143, 145, 146, 0, 0, 147, 149, 151, 0,
0, 0, 174, 0, 177, 179, 0, 181, 183, 0,
211, 0, 406, 0, 0, 0, 0, 229, 0, 0,
252, 0, 256, 257, 258, 0, 0, 0, 307, 308,
365, 367, 368, 369, 370, 371, 372, 373, 375, 376,
377, 378, 0, 0, 0, 261, 285, 287, 288, 343,
0, 344, 347, 349, 351, 0, 353, 355, 0, 0,
360, 363, 0, 0, 0, 0, 305, 306, 0, 0,
0, 0, 0, 0, 0, 0, 0, 340, 0, 379,
233, 237, 0, 234, 238, 0, 0, 243, 251, 0,
0, 0, 91, 0, 385, 391, 392, 0, 225, 231,
0, 335, 245, 74, 140, 23, 239, 250, 0, 90,
67, 83, 311, 0, 169, 171, 154, 157, 155, 159,
185, 187, 0, 189, 0, 0, 0, 209, 210, 0,
92, 0, 0, 0, 0, 114, 0, 124, 115, 118,
126, 119, 0, 121, 129, 0, 130, 0, 142, 0,
166, 405, 0, 0, 131, 0, 173, 0, 176, 0,
180, 0, 0, 0, 0, 218, 0, 226, 221, 0,
0, 0, 230, 253, 254, 0, 305, 281, 397, 284,
268, 0, 0, 385, 389, 390, 271, 0, 0, 260,
0, 0, 0, 0, 0, 287, 0, 0, 0, 352,
0, 0, 0, 0, 356, 357, 0, 273, 274, 277,
278, 302, 0, 296, 0, 299, 0, 0, 0, 0,
330, 331, 0, 336, 0, 341, 0, 0, 241, 0,
70, 83, 72, 83, 80, 83, 134, 0, 0, 353,
386, 387, 0, 0, 0, 246, 66, 0, 84, 85,
87, 88, 0, 0, 0, 0, 0, 0, 188, 0,
193, 397, 208, 207, 385, 94, 0, 96, 98, 100,
382, 103, 0, 0, 0, 108, 109, 110, 116, 120,
144, 148, 0, 0, 381, 150, 152, 132, 175, 178,
182, 184, 212, 0, 0, 0, 0, 0, 0, 0,
0, 374, 0, 0, 366, 0, 0, 262, 286, 345,
346, 0, 348, 350, -2, 358, 359, 361, 362, 364,
0, 0, 0, 0, 0, 0, 0, 0, 0, 333,
0, 337, 0, 0, 0, 380, 0, 0, 0, 0,
0, 383, 393, 0, 0, 0, 0, 0, 0, 0,
0, 312, 0, 314, 0, 316, 311, 318, 319, 327,
0, 320, 321, 322, 323, 324, 325, 326, 168, 170,
0, 158, 0, 161, 163, 190, 196, 198, 0, 202,
-2, 200, 399, 0, 0, 402, 403, 404, -2, 0,
95, 0, 0, 0, 104, 0, 0, 385, 112, 113,
165, 167, 0, 217, 0, 0, 227, 0, 0, 0,
265, 0, 0, 282, 283, 269, 384, 272, 367, 275,
279, 303, 297, 300, 0, 0, 0, 332, 0, 338,
0, 235, 240, 0, 0, 0, 0, 0, 0, 395,
394, 0, 388, 232, 264, 68, 86, 310, 313, 315,
0, 328, 172, 342, 160, 0, 0, 0, 0, 0,
400, 401, 0, 0, 97, 99, 101, 0, 107, 106,
0, 213, 219, 0, 222, 0, 0, 266, 0, 0,
0, 0, 291, 293, 295, 334, 339, 0, 248, 0,
244, 71, 73, 81, 396, 317, 162, 164, 191, 197,
199, 203, 204, 0, 105, 111, 220, 223, 228, 267,
0, 276, 280, 0, 0, 242, 205, 289, 236, 249,
0, 206 };
typedef struct { char *t_name; int t_val; } yytoktype;
#ifndef YYDEBUG
# define YYDEBUG 0 /* don't allow debugging */
#endif
/* @(#)yaccpar 1.3 com/cmd/lang/yacc,3.1,9021 9/7/89 18:46:37 */
/*
** Skeleton parser driver for yacc output
*/
/*
** yacc user known macros and defines
*/
#ifdef YYSPLIT
# define YYERROR return(-2)
#else
# define YYERROR goto yyerrlab
#endif
#define YYACCEPT return(0)
#define YYABORT return(1)
#define YYBACKUP( newtoken, newvalue )\
{\
if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
{\
yyerror( "syntax error - cannot backup" );\
goto yyerrlab;\
}\
yychar = newtoken;\
yystate = *yyps;\
yylval = newvalue;\
goto yynewstate;\
}
#define YYRECOVERING() (!!yyerrflag)
#ifndef YYDEBUG
# define YYDEBUG 1 /* make debugging available */
#endif
/*
** user known globals
*/
int yydebug; /* set to 1 to get debugging */
/*
** driver internal defines
*/
#define YYFLAG (-1000)
#ifdef YYSPLIT
# define YYSCODE { \
extern int (*yyf[])(); \
register int yyret; \
if (yyf[yytmp]) \
if ((yyret=(*yyf[yytmp])()) == -2) \
goto yyerrlab; \
else if (yyret>=0) return(yyret); \
}
#endif
/*
** global variables used by the parser
*/
YYSTYPE yyv[ YYMAXDEPTH ]; /* value stack */
int yys[ YYMAXDEPTH ]; /* state stack */
YYSTYPE *yypv; /* top of value stack */
YYSTYPE *yypvt; /* top of value stack for $vars */
int *yyps; /* top of state stack */
int yystate; /* current state */
int yytmp; /* extra var (lasts between blocks) */
int yynerrs; /* number of errors */
int yyerrflag; /* error recovery flag */
int yychar; /* current input token number */
/*
** yyparse - return 0 if worked, 1 if syntax error not recovered from
*/
int
yyparse()
{
/*
** Initialize externals - yyparse may be called more than once
*/
yypv = &yyv[-1];
yyps = &yys[-1];
yystate = 0;
yytmp = 0;
yynerrs = 0;
yyerrflag = 0;
yychar = -1;
goto yystack;
{
register YYSTYPE *yy_pv; /* top of value stack */
register int *yy_ps; /* top of state stack */
register int yy_state; /* current state */
register int yy_n; /* internal state number info */
/*
** get globals into registers.
** branch to here only if YYBACKUP was called.
*/
yynewstate:
yy_pv = yypv;
yy_ps = yyps;
yy_state = yystate;
goto yy_newstate;
/*
** get globals into registers.
** either we just started, or we just finished a reduction
*/
yystack:
yy_pv = yypv;
yy_ps = yyps;
yy_state = yystate;
/*
** top of for (;;) loop while no reductions done
*/
yy_stack:
/*
** put a state and value onto the stacks
*/
if ( ++yy_ps >= &yys[ YYMAXDEPTH ] ) /* room on stack? */
{
yyerror( "yacc stack overflow" );
YYABORT;
}
*yy_ps = yy_state;
*++yy_pv = yyval;
/*
** we have a new state - find out what to do
*/
yy_newstate:
if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
goto yydefault; /* simple state */
if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
yychar = 0; /* reached EOF */
if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
goto yydefault;
if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
{
yychar = -1;
yyval = yylval;
yy_state = yy_n;
if ( yyerrflag > 0 )
yyerrflag--;
goto yy_stack;
}
yydefault:
if ( ( yy_n = yydef[ yy_state ] ) == -2 )
{
if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
yychar = 0; /* reached EOF */
/*
** look through exception table
*/
{
register int *yyxi = yyexca;
while ( ( *yyxi != -1 ) ||
( yyxi[1] != yy_state ) )
{
yyxi += 2;
}
while ( ( *(yyxi += 2) >= 0 ) &&
( *yyxi != yychar ) )
;
if ( ( yy_n = yyxi[1] ) < 0 )
YYACCEPT;
}
}
/*
** check for syntax error
*/
if ( yy_n == 0 ) /* have an error */
{
/* no worry about speed here! */
switch ( yyerrflag )
{
case 0: /* new error */
yyerror( "syntax error" );
goto skip_init;
yyerrlab:
/*
** get globals into registers.
** we have a user generated syntax type error
*/
yy_pv = yypv;
yy_ps = yyps;
yy_state = yystate;
yynerrs++;
skip_init:
case 1:
case 2: /* incompletely recovered error */
/* try again... */
yyerrflag = 3;
/*
** find state where "error" is a legal
** shift action
*/
while ( yy_ps >= yys )
{
yy_n = yypact[ *yy_ps ] + YYERRCODE;
if ( yy_n >= 0 && yy_n < YYLAST &&
yychk[yyact[yy_n]] == YYERRCODE) {
/*
** simulate shift of "error"
*/
yy_state = yyact[ yy_n ];
goto yy_stack;
}
/*
** current state has no shift on
** "error", pop stack
*/
yy_ps--;
yy_pv--;
}
/*
** there is no state on stack with "error" as
** a valid shift. give up.
*/
YYABORT;
case 3: /* no shift yet; eat a token */
if ( yychar == 0 ) /* reached EOF. quit */
YYABORT;
yychar = -1;
goto yy_newstate;
}
}/* end if ( yy_n == 0 ) */
/*
** reduction by production yy_n
** put stack tops, etc. so things right after switch
*/
yytmp = yy_n; /* value to switch over */
yypvt = yy_pv; /* $vars top of value stack */
/*
** Look in goto table for next state
** Sorry about using yy_state here as temporary
** register variable, but why not, if it works...
** If yyr2[ yy_n ] doesn't have the low order bit
** set, then there is no action to be done for
** this reduction. So, no saving & unsaving of
** registers done. The only difference between the
** code just after the if and the body of the if is
** the goto yy_stack in the body. This way the test
** can be made before the choice of what to do is needed.
*/
{
/* length of production doubled with extra bit */
register int yy_len = yyr2[ yy_n ];
if ( !( yy_len & 01 ) )
{
yy_len >>= 1;
yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
*( yy_ps -= yy_len ) + 1;
if ( yy_state >= YYLAST ||
yychk[ yy_state =
yyact[ yy_state ] ] != -yy_n )
{
yy_state = yyact[ yypgo[ yy_n ] ];
}
goto yy_stack;
}
yy_len >>= 1;
yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
*( yy_ps -= yy_len ) + 1;
if ( yy_state >= YYLAST ||
yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
{
yy_state = yyact[ yypgo[ yy_n ] ];
}
}
/* save until reenter driver code */
yystate = yy_state;
yyps = yy_ps;
yypv = yy_pv;
}
/*
** code supplied by user is placed in this switch
*/
switch(yytmp){
case 5:
# line 204 "fortran.y"
{
/* Create id token for prog if unnamed. */
if(current_module_hash == -1) {
implied_id_token(&(yypvt[-0]),unnamed_prog);
def_function(
type_PROGRAM,&(yypvt[-0]),(Token*)NULL);
current_module_hash =
def_curr_module(&(yypvt[-0]));
current_module_type = type_PROGRAM;
}
prev_stmt_class = curr_stmt_class;
integer_context = FALSE;
} /*NOTREACHED*/ break;
case 6:
# line 218 "fortran.y"
{
if(current_module_hash == -1) {
implied_id_token(&(yypvt[-0]),unnamed_prog);
def_function(
type_PROGRAM,&(yypvt[-0]),(Token*)NULL);
current_module_hash =
def_curr_module(&(yypvt[-0]));
current_module_type = type_PROGRAM;
}
if(prev_stmt_class != tok_RETURN)
do_RETURN(current_module_hash,&(yypvt[-0]));
END_processing(&(yyval));
goto_flag = prev_goto = FALSE;
prev_stmt_class = curr_stmt_class;
} /*NOTREACHED*/ break;
case 9:
# line 243 "fortran.y"
{
if(executable_stmt)
prev_goto = goto_flag;
} /*NOTREACHED*/ break;
case 10:
# line 248 "fortran.y"
{
if(executable_stmt) {
if(prev_goto)
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"No path to this statement");
prev_goto = goto_flag;
}
} /*NOTREACHED*/ break;
case 11:
# line 259 "fortran.y"
{
exec_stmt_count = 0;
executable_stmt = FALSE;
} /*NOTREACHED*/ break;
case 12:
# line 264 "fortran.y"
{
executable_stmt = FALSE;
} /*NOTREACHED*/ break;
case 13:
# line 268 "fortran.y"
{ /* handle statement functions correctly */
if(is_true(STMT_FUNCTION_EXPR, yypvt[-0].subclass)
&& stmt_sequence_no <= seq_stmt_fun) {
stmt_sequence_no = seq_stmt_fun;
executable_stmt = FALSE;
}
else {
stmt_sequence_no = seq_exec;
++exec_stmt_count;
executable_stmt = TRUE;
}
} /*NOTREACHED*/ break;
case 14:
# line 281 "fortran.y"
{
stmt_sequence_no = seq_exec;
++exec_stmt_count;
executable_stmt = TRUE;
} /*NOTREACHED*/ break;
case 15:
# line 287 "fortran.y"
{
executable_stmt = TRUE;
if(stmt_sequence_no == 0)
stmt_sequence_no = seq_header;
complex_const_allowed = FALSE; /* turn off flags */
inside_format=FALSE;
integer_context = FALSE;
yyerrok; /* (error message already given) */
} /*NOTREACHED*/ break;
case 16:
# line 299 "fortran.y"
{
current_module_type = type_PROGRAM;
} /*NOTREACHED*/ break;
case 17:
# line 303 "fortran.y"
{
current_module_type = type_SUBROUTINE;
} /*NOTREACHED*/ break;
case 18:
# line 307 "fortran.y"
{
current_module_type = type_SUBROUTINE;
} /*NOTREACHED*/ break;
case 19:
# line 311 "fortran.y"
{
current_module_type = type_BLOCK_DATA;
} /*NOTREACHED*/ break;
case 23:
# line 324 "fortran.y"
{
#ifdef ALLOW_INCLUDE
if(f77_standard) {
nonstandard(yypvt[-2].line_num,yypvt[-2].col_num);
}
open_include_file(yypvt[-1].value.string);
#else
syntax_error(yypvt[-2].line_num,yypvt[-2].col_num,
"statement not permitted");
#endif
} /*NOTREACHED*/ break;
case 24:
# line 344 "fortran.y"
{
if(stmt_sequence_no < seq_implicit) {
stmt_sequence_no = seq_implicit;
}
goto_flag = prev_goto = FALSE;
} /*NOTREACHED*/ break;
case 25:
# line 351 "fortran.y"
{
if(stmt_sequence_no < seq_implicit) {
stmt_sequence_no = seq_implicit;
}
} /*NOTREACHED*/ break;
case 26:
# line 357 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
if(stmt_sequence_no < seq_implicit) {
stmt_sequence_no = seq_implicit;
}
}
} /*NOTREACHED*/ break;
case 27:
# line 369 "fortran.y"
{
if(stmt_sequence_no > seq_implicit) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_implicit;
}
} /*NOTREACHED*/ break;
case 28:
# line 379 "fortran.y"
{
if(stmt_sequence_no < seq_stmt_fun) {
stmt_sequence_no = seq_stmt_fun;
}
} /*NOTREACHED*/ break;
case 29:
# line 385 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_specif;
}
} /*NOTREACHED*/ break;
case 30:
# line 395 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_specif;
}
} /*NOTREACHED*/ break;
case 31:
# line 405 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_specif;
}
} /*NOTREACHED*/ break;
case 32:
# line 415 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_specif;
}
} /*NOTREACHED*/ break;
case 33:
# line 425 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_specif;
}
} /*NOTREACHED*/ break;
case 34:
# line 435 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_specif;
}
} /*NOTREACHED*/ break;
case 35:
# line 445 "fortran.y"
{
if(stmt_sequence_no > seq_specif) {
syntax_error(yypvt[-0].line_num, NO_COL_NUM,
"Statement out of order.");
}
else {
stmt_sequence_no = seq_specif;
}
} /*NOTREACHED*/ break;
case 36:
# line 460 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 37:
# line 464 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 38:
# line 468 "fortran.y"
{
goto_flag=TRUE;
} /*NOTREACHED*/ break;
case 39:
# line 472 "fortran.y"
{
goto_flag=FALSE; /* fallthru allowed */
} /*NOTREACHED*/ break;
case 40:
# line 476 "fortran.y"
{
goto_flag=TRUE;
} /*NOTREACHED*/ break;
case 41:
# line 480 "fortran.y"
{
goto_flag=TRUE;
} /*NOTREACHED*/ break;
case 42:
# line 484 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 43:
# line 488 "fortran.y"
{
goto_flag=TRUE;
} /*NOTREACHED*/ break;
case 44:
# line 492 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 45:
# line 496 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 46:
# line 500 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 47:
# line 504 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 48:
# line 508 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 49:
# line 512 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 50:
# line 516 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 51:
# line 520 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 52:
# line 524 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 53:
# line 528 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 54:
# line 532 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 55:
# line 536 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 56:
# line 540 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 57:
# line 544 "fortran.y"
{
goto_flag=TRUE;
} /*NOTREACHED*/ break;
case 58:
# line 551 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 59:
# line 555 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 60:
# line 559 "fortran.y"
{
prev_goto = goto_flag =FALSE;
} /*NOTREACHED*/ break;
case 61:
# line 563 "fortran.y"
{
prev_goto = goto_flag =FALSE;
} /*NOTREACHED*/ break;
case 62:
# line 567 "fortran.y"
{
prev_goto = goto_flag =FALSE;
} /*NOTREACHED*/ break;
case 63:
# line 571 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 64:
# line 575 "fortran.y"
{
goto_flag=FALSE;
} /*NOTREACHED*/ break;
case 65:
# line 581 "fortran.y"
{check_seq_header(&(yypvt[-0]));} /*NOTREACHED*/ break;
case 66:
# line 583 "fortran.y"
{
def_function(
type_PROGRAM,&(yypvt[-1]),(Token*)NULL);
current_module_hash =
def_curr_module(&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 67:
# line 596 "fortran.y"
{
do_ENTRY(&(yypvt[-1]),(Token*)NULL
,current_module_hash);
} /*NOTREACHED*/ break;
case 68:
# line 601 "fortran.y"
{
do_ENTRY(&(yypvt[-4]),&(yypvt[-2])
,current_module_hash);
if(debug_parser)
print_exprlist("entry stmt",&(yypvt[-2]));
} /*NOTREACHED*/ break;
case 70:
# line 615 "fortran.y"
{
def_function(
current_datatype,&(yypvt[-1]),(Token*)NULL);
current_module_hash=
def_curr_module(&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 71:
# line 623 "fortran.y"
{
def_function(
current_datatype,&(yypvt[-4]),&(yypvt[-2]));
current_module_hash=
def_curr_module(&(yypvt[-4]));
if(debug_parser)
print_exprlist("function stmt",&(yypvt[-2]));
} /*NOTREACHED*/ break;
case 72:
# line 632 "fortran.y"
{
def_function(
type_UNDECL,&(yypvt[-1]),(Token*)NULL);
current_module_hash=
def_curr_module(&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 73:
# line 640 "fortran.y"
{
def_function(
type_UNDECL,&(yypvt[-4]),&(yypvt[-2]));
current_module_hash=
def_curr_module(&(yypvt[-4]));
if(debug_parser)
print_exprlist("function stmt",&(yypvt[-2]));
} /*NOTREACHED*/ break;
case 74:
# line 652 "fortran.y"
{
check_seq_header(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 75:
# line 659 "fortran.y"
{
check_seq_header(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 80:
# line 678 "fortran.y"
{
def_function(
type_SUBROUTINE,&(yypvt[-1]),(Token*)NULL);
current_module_hash=
def_curr_module(&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 81:
# line 686 "fortran.y"
{
def_function(
type_SUBROUTINE,&(yypvt[-4]),&(yypvt[-2]));
current_module_hash=
def_curr_module(&(yypvt[-4]));
if(debug_parser)
print_exprlist("subroutine stmt",&(yypvt[-2]));
} /*NOTREACHED*/ break;
case 82:
# line 697 "fortran.y"
{
check_seq_header(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 83:
# line 703 "fortran.y"
{
yyval.next_token = (Token*)NULL;
} /*NOTREACHED*/ break;
case 85:
# line 710 "fortran.y"
{
yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 86:
# line 714 "fortran.y"
{
yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 87:
# line 720 "fortran.y"
{
def_arg_name(&(yypvt[-0]));
primary_id_expr(&(yypvt[-0]),&(yyval));
} /*NOTREACHED*/ break;
case 88:
# line 725 "fortran.y"
{
yyval.class = type_byte(class_LABEL,type_LABEL);
yyval.subclass = 0;
} /*NOTREACHED*/ break;
case 90:
# line 736 "fortran.y"
{
def_function(
type_BLOCK_DATA,&(yypvt[-1]),(Token*)NULL);
current_module_hash=
def_curr_module(&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 91:
# line 745 "fortran.y"
{
check_seq_header(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 95:
# line 759 "fortran.y"
{
def_array_dim(&(yypvt[-3]),&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 96:
# line 766 "fortran.y"
{
yyval.class = 1;
yyval.subclass = yypvt[-0].subclass;
} /*NOTREACHED*/ break;
case 97:
# line 771 "fortran.y"
{
yyval.class = yypvt[-2].class + 1;
yyval.subclass = yypvt[-2].subclass *
yypvt[-0].subclass;
} /*NOTREACHED*/ break;
case 98:
# line 779 "fortran.y"
{
yyval.subclass = yypvt[-0].value.integer;
} /*NOTREACHED*/ break;
case 99:
# line 783 "fortran.y"
{
yyval.subclass = yypvt[-0].value.integer -
yypvt[-2].value.integer + 1;
} /*NOTREACHED*/ break;
case 100:
# line 788 "fortran.y"
{
yyval.subclass = 0;
} /*NOTREACHED*/ break;
case 101:
# line 792 "fortran.y"
{
yyval.subclass = 0;
} /*NOTREACHED*/ break;
case 102:
# line 798 "fortran.y"
{equivalence_flag = TRUE;} /*NOTREACHED*/ break;
case 103:
# line 799 "fortran.y"
{equivalence_flag = FALSE;} /*NOTREACHED*/ break;
case 106:
# line 807 "fortran.y"
{
equivalence(&(yypvt[-2]), &(yypvt[-0]));
} /*NOTREACHED*/ break;
case 107:
# line 811 "fortran.y"
{
equivalence(&(yypvt[-2]), &(yypvt[-0]));
} /*NOTREACHED*/ break;
case 108:
# line 818 "fortran.y"
{
def_equiv_name(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 109:
# line 822 "fortran.y"
{
def_equiv_name(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 110:
# line 826 "fortran.y"
{
def_equiv_name(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 114:
# line 841 "fortran.y"
{
implied_id_token(&(yyval),blank_com_name);
def_com_block(&(yyval), &(yypvt[-1]));
if(is_true(COMMA_FLAG,yypvt[-1].subclass))
syntax_error(
yypvt[-1].line_num,yypvt[-1].col_num,
"trailing comma");
if(debug_parser)
print_comlist("blank common",&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 115:
# line 853 "fortran.y"
{
if(is_true(COMMA_FLAG,yypvt[-1].subclass))
syntax_error(
yypvt[-1].line_num,yypvt[-1].col_num,
"trailing comma");
} /*NOTREACHED*/ break;
case 116:
# line 861 "fortran.y"
{
implied_id_token(&(yyval),blank_com_name);
def_com_block(&(yyval),&(yypvt[-2]));
if(is_true(COMMA_FLAG,yypvt[-1].subclass))
syntax_error(
yypvt[-1].line_num,yypvt[-1].col_num,
"trailing comma");
if(debug_parser)
print_comlist("blank common",&(yypvt[-2]));
} /*NOTREACHED*/ break;
case 117:
# line 878 "fortran.y"
{
yyval.subclass = yypvt[-0].subclass;
} /*NOTREACHED*/ break;
case 118:
# line 882 "fortran.y"
{
yyval.subclass = yypvt[-0].subclass;
yyval.line_num = yypvt[-0].line_num;
yyval.col_num = yypvt[-0].col_num;
} /*NOTREACHED*/ break;
case 119:
# line 890 "fortran.y"
{
def_com_block(&(yypvt[-1]),&(yypvt[-0]));
yyval.subclass = yypvt[-0].subclass;
yyval.line_num = yypvt[-0].line_num;
yyval.col_num = yypvt[-0].col_num;
if(debug_parser)
print_comlist("labeled common",&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 120:
# line 901 "fortran.y"
{
yyval = yypvt[-1];
} /*NOTREACHED*/ break;
case 121:
# line 906 "fortran.y"
{
implied_id_token(&(yyval),blank_com_name);
} /*NOTREACHED*/ break;
case 122:
# line 910 "fortran.y"
{
implied_id_token(&(yyval),blank_com_name);
} /*NOTREACHED*/ break;
case 123:
# line 916 "fortran.y"
{
yyval.subclass = yypvt[-0].subclass;
yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 124:
# line 921 "fortran.y"
{
if(!is_true(COMMA_FLAG,yypvt[-1].subclass))
syntax_error(
yypvt[-1].line_num,yypvt[-1].col_num,
"missing comma");
yyval.subclass = yypvt[-0].subclass;
yyval.line_num = yypvt[-0].line_num;
yyval.col_num = yypvt[-0].col_num;
yyval.next_token = append_token(yypvt[-1].next_token,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 125:
# line 934 "fortran.y"
{ /* no comma */
yyval.subclass = yypvt[-0].subclass;
make_false(COMMA_FLAG,yyval.subclass);
} /*NOTREACHED*/ break;
case 126:
# line 939 "fortran.y"
{ /* has comma */
yyval.subclass = yypvt[-1].subclass;
make_true(COMMA_FLAG,yyval.subclass);
} /*NOTREACHED*/ break;
case 127:
# line 946 "fortran.y"
{
def_com_variable(&(yypvt[-0]));
primary_id_expr(&(yypvt[-0]),&(yyval));
} /*NOTREACHED*/ break;
case 128:
# line 951 "fortran.y"
{
def_com_variable(&(yypvt[-0]));
primary_id_expr(&(yypvt[-0]),&(yyval));
} /*NOTREACHED*/ break;
case 134:
# line 969 "fortran.y"
{
/* Only REAL*8 is actually recognized */
if(current_datatype == type_REAL
&& yypvt[-0].value.integer == 8)
current_datatype = type_DP;
if(f77_standard) {
nonstandard(yypvt[-0].line_num,yypvt[-0].col_num);
}
} /*NOTREACHED*/ break;
case 136:
# line 984 "fortran.y"
{
current_datatype = type_INTEGER;
integer_context = TRUE;
} /*NOTREACHED*/ break;
case 137:
# line 989 "fortran.y"
{
current_datatype = type_REAL;
integer_context = TRUE;
} /*NOTREACHED*/ break;
case 138:
# line 994 "fortran.y"
{
current_datatype = type_COMPLEX;
integer_context = TRUE;
} /*NOTREACHED*/ break;
case 139:
# line 999 "fortran.y"
{
current_datatype = type_LOGICAL;
integer_context = TRUE;
} /*NOTREACHED*/ break;
case 140:
# line 1006 "fortran.y"
{
current_datatype = type_DP;
} /*NOTREACHED*/ break;
case 141:
# line 1012 "fortran.y"
{
current_datatype = type_STRING;
integer_context = TRUE;
} /*NOTREACHED*/ break;
case 142:
# line 1019 "fortran.y"
{
current_datatype = type_STRING;
} /*NOTREACHED*/ break;
case 145:
# line 1029 "fortran.y"
{
declare_type(&(yypvt[-0]),current_datatype);
} /*NOTREACHED*/ break;
case 146:
# line 1033 "fortran.y"
{
declare_type(&(yypvt[-0]),current_datatype);
} /*NOTREACHED*/ break;
case 149:
# line 1043 "fortran.y"
{
declare_type(&(yypvt[-0]),current_datatype);
} /*NOTREACHED*/ break;
case 150:
# line 1047 "fortran.y"
{
declare_type(&(yypvt[-2]),current_datatype);
} /*NOTREACHED*/ break;
case 151:
# line 1051 "fortran.y"
{
declare_type(&(yypvt[-0]),current_datatype);
} /*NOTREACHED*/ break;
case 152:
# line 1055 "fortran.y"
{
declare_type(&(yypvt[-2]),current_datatype);
} /*NOTREACHED*/ break;
case 153:
# line 1062 "fortran.y"
{implicit_flag=TRUE;} /*NOTREACHED*/ break;
case 154:
# line 1066 "fortran.y"
{
{implicit_flag=FALSE;}
if(implicit_none) {
syntax_error(yypvt[-2].line_num,yypvt[-2].col_num,
"conflicts with IMPLICIT NONE");
}
else {
implicit_type_given = TRUE;
}
} /*NOTREACHED*/ break;
case 155:
# line 1077 "fortran.y"
{
int h=yypvt[-1].value.integer;
{implicit_flag=FALSE;}
if( strcmp(hashtab[h].name,"NONE") == 0 ) {
if(implicit_type_given) {
syntax_error(yypvt[-2].line_num,yypvt[-2].col_num,
"conflicts with IMPLICIT statement");
}
else {
if(f77_standard)
nonstandard(yypvt[-1].line_num,yypvt[-1].col_num);
implicit_none = TRUE;
}
}
else {
syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
"unknown keyword -- ignored");
}
} /*NOTREACHED*/ break;
case 157:
# line 1099 "fortran.y"
{initial_flag = TRUE;} /*NOTREACHED*/ break;
case 159:
# line 1105 "fortran.y"
{implicit_letter_flag = TRUE;} /*NOTREACHED*/ break;
case 160:
# line 1106 "fortran.y"
{implicit_letter_flag = FALSE;} /*NOTREACHED*/ break;
case 163:
# line 1114 "fortran.y"
{
set_implicit_type(current_datatype,
yypvt[-0].subclass,yypvt[-0].subclass);
} /*NOTREACHED*/ break;
case 164:
# line 1119 "fortran.y"
{
set_implicit_type(current_datatype,
yypvt[-2].subclass,yypvt[-0].subclass);
} /*NOTREACHED*/ break;
case 171:
# line 1140 "fortran.y"
{complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
case 172:
# line 1142 "fortran.y"
{
def_parameter(&(yypvt[-3]),&(yypvt[-0]));
complex_const_allowed = FALSE;
} /*NOTREACHED*/ break;
case 174:
# line 1153 "fortran.y"
{
def_ext_name(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 175:
# line 1157 "fortran.y"
{
def_ext_name(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 177:
# line 1167 "fortran.y"
{
def_intrins_name(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 178:
# line 1171 "fortran.y"
{
def_intrins_name(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 183:
# line 1186 "fortran.y"
{
ref_variable(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 184:
# line 1190 "fortran.y"
{
def_com_block(&(yypvt[-1]),(Token*)NULL);
} /*NOTREACHED*/ break;
case 189:
# line 1205 "fortran.y"
{complex_const_allowed=TRUE;} /*NOTREACHED*/ break;
case 190:
# line 1207 "fortran.y"
{complex_const_allowed=FALSE;} /*NOTREACHED*/ break;
case 194:
# line 1216 "fortran.y"
{
use_lvalue(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 201:
# line 1232 "fortran.y"
{
use_parameter(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 203:
# line 1239 "fortran.y"
{
use_parameter(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 204:
# line 1245 "fortran.y"
{
use_implied_do_index(&(yypvt[-3]));
} /*NOTREACHED*/ break;
case 209:
# line 1259 "fortran.y"
{
use_lvalue(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 211:
# line 1267 "fortran.y"
{complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
case 212:
# line 1268 "fortran.y"
{
assignment_stmt_type(&(yypvt[-3]),&(yypvt[-2]),
&(yypvt[-0]));
complex_const_allowed = FALSE;
} /*NOTREACHED*/ break;
case 213:
# line 1274 "fortran.y"
{
/* Clear u-b-s flags spuriously set */
if(is_true(STMT_FUNCTION_EXPR, yypvt[-5].subclass)
&& stmt_sequence_no <= seq_stmt_fun)
stmt_function_stmt(&(yypvt[-5]));
} /*NOTREACHED*/ break;
case 217:
# line 1291 "fortran.y"
{
do_ASSIGN(&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 221:
# line 1308 "fortran.y"
{
do_assigned_GOTO(&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 222:
# line 1312 "fortran.y"
{
do_assigned_GOTO(&(yypvt[-4]));
} /*NOTREACHED*/ break;
case 223:
# line 1316 "fortran.y"
{
do_assigned_GOTO(&(yypvt[-5]));
} /*NOTREACHED*/ break;
case 231:
# line 1341 "fortran.y"
{complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
case 232:
# line 1342 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-1].subclass)){
use_variable(&(yypvt[-1]));
}
complex_const_allowed = FALSE;
initial_flag = TRUE; /* for is_keyword */
} /*NOTREACHED*/ break;
case 234:
# line 1354 "fortran.y"
{complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
case 235:
# line 1355 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-1].subclass)){
use_variable(&(yypvt[-1]));
}
complex_const_allowed = FALSE;
initial_flag = TRUE;
} /*NOTREACHED*/ break;
case 240:
# line 1385 "fortran.y"
{
use_lvalue(&(yypvt[-3]));
use_variable(&(yypvt[-3]));
} /*NOTREACHED*/ break;
case 241:
# line 1390 "fortran.y"
{complex_const_allowed=TRUE;} /*NOTREACHED*/ break;
case 242:
# line 1391 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-2].subclass)){
use_variable(&(yypvt[-2]));
}
complex_const_allowed=FALSE;
/* (N.B. nonportability flagged in do_handle) */
} /*NOTREACHED*/ break;
case 243:
# line 1399 "fortran.y"
{complex_const_allowed=TRUE;} /*NOTREACHED*/ break;
case 244:
# line 1400 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-2].subclass)){
use_variable(&(yypvt[-2]));
}
complex_const_allowed=FALSE;
#ifdef ALLOW_DO_ENDO
if(f77_standard)
nonstandard(yypvt[-5].line_num,yypvt[-5].col_num);
#else
syntax_error(yypvt[-5].line_num,yypvt[-5].col_num,
"Nonstandard syntax");
#endif
} /*NOTREACHED*/ break;
case 247:
# line 1418 "fortran.y"
{
#ifdef ALLOW_DO_ENDO
if(f77_standard)
nonstandard(yypvt[-0].line_num,yypvt[-0].col_num);
#else
syntax_error(yypvt[-0].line_num,yypvt[-0].col_num,
"Nonstandard syntax");
#endif
} /*NOTREACHED*/ break;
case 250:
# line 1434 "fortran.y"
{
#ifdef ALLOW_DO_ENDO
if(f77_standard)
nonstandard(yypvt[-1].line_num,yypvt[-1].col_num);
#else
syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
"Nonstandard syntax");
#endif
} /*NOTREACHED*/ break;
case 251:
# line 1444 "fortran.y"
{
#ifdef ALLOW_DO_ENDO
if(f77_standard)
nonstandard(yypvt[-1].line_num,yypvt[-1].col_num);
#else
syntax_error(yypvt[-1].line_num,yypvt[-1].col_num,
"Nonstandard syntax");
#endif
} /*NOTREACHED*/ break;
case 257:
# line 1470 "fortran.y"
{
use_variable(&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 259:
# line 1478 "fortran.y"
{complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
case 261:
# line 1480 "fortran.y"
{complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
case 263:
# line 1483 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 264:
# line 1485 "fortran.y"
{complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
case 270:
# line 1498 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 271:
# line 1502 "fortran.y"
{
if(f77_standard)
nonstandard(yypvt[-2].line_num,yypvt[-2].col_num);
} /*NOTREACHED*/ break;
case 272:
# line 1507 "fortran.y"
{
if(f77_standard)
nonstandard(yypvt[-4].line_num,yypvt[-4].col_num);
} /*NOTREACHED*/ break;
case 274:
# line 1516 "fortran.y"
{complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
case 275:
# line 1517 "fortran.y"
{complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
case 277:
# line 1521 "fortran.y"
{
if(f77_standard)
nonstandard(yypvt[-2].line_num,yypvt[-2].col_num);
} /*NOTREACHED*/ break;
case 278:
# line 1526 "fortran.y"
{complex_const_allowed = TRUE;} /*NOTREACHED*/ break;
case 279:
# line 1527 "fortran.y"
{complex_const_allowed = FALSE;} /*NOTREACHED*/ break;
case 280:
# line 1528 "fortran.y"
{
if(f77_standard)
nonstandard(yypvt[-6].line_num,yypvt[-6].col_num);
} /*NOTREACHED*/ break;
case 281:
# line 1536 "fortran.y"
{
++control_item_count;
} /*NOTREACHED*/ break;
case 282:
# line 1540 "fortran.y"
{
++control_item_count;
} /*NOTREACHED*/ break;
case 283:
# line 1549 "fortran.y"
{
/* This section awaits writing of code
to handle i/o keywords. For now, just
assume unit_id is used, whatever it is. */
/** if( $3.class != '*'
** && is_true(ID_EXPR,$3.subclass)){
** use_variable(&($3));
** }
*/
use_io_keyword(&(yypvt[-2]),&(yypvt[-0]),curr_stmt_class);
} /*NOTREACHED*/ break;
case 284:
# line 1561 "fortran.y"
{
if( yypvt[-0].class != '*'
&& is_true(ID_EXPR,yypvt[-0].subclass)){
/* WRITE(string,...) means store
output in the string */
if(curr_stmt_class == tok_WRITE
&& control_item_count == 0
&& datatype_of(yypvt[-0].class) == type_STRING)
use_lvalue(&(yypvt[-0]));
use_variable(&(yypvt[-0]));
}
} /*NOTREACHED*/ break;
case 287:
# line 1582 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
if( curr_stmt_class == tok_READ ||
curr_stmt_class == tok_ACCEPT )
use_lvalue(&(yypvt[-0]));
else
use_variable(&(yypvt[-0]));
}
} /*NOTREACHED*/ break;
case 289:
# line 1596 "fortran.y"
{
use_implied_do_index(&(yypvt[-3]));
} /*NOTREACHED*/ break;
case 290:
# line 1602 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 292:
# line 1607 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 294:
# line 1612 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 298:
# line 1620 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 301:
# line 1627 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 304:
# line 1634 "fortran.y"
{control_item_count = 0;} /*NOTREACHED*/ break;
case 307:
# line 1648 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_variable(&(yypvt[-0]));
}
} /*NOTREACHED*/ break;
case 309:
# line 1657 "fortran.y"
{inside_format=TRUE;} /*NOTREACHED*/ break;
case 310:
# line 1658 "fortran.y"
{
inside_format=FALSE;
} /*NOTREACHED*/ break;
case 325:
# line 1685 "fortran.y"
{
if(f77_standard)
nonstandard(yypvt[-0].line_num,yypvt[-0].col_num);
} /*NOTREACHED*/ break;
case 329:
# line 1702 "fortran.y"
{
call_subr(&(yypvt[-0]),(Token*)NULL);
complex_const_allowed = FALSE;
} /*NOTREACHED*/ break;
case 331:
# line 1708 "fortran.y"
{
call_subr(&(yypvt[-2]),(Token*)NULL);
complex_const_allowed = FALSE;
} /*NOTREACHED*/ break;
case 333:
# line 1714 "fortran.y"
{
call_subr(&(yypvt[-3]),&(yypvt[-1]));
if(debug_parser)
print_exprlist("call stmt",&(yypvt[-1]));
complex_const_allowed = FALSE;
} /*NOTREACHED*/ break;
case 335:
# line 1723 "fortran.y"
{
complex_const_allowed = TRUE;
yyval = yypvt[-0];
} /*NOTREACHED*/ break;
case 336:
# line 1729 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_actual_arg(&(yypvt[-0]));
use_variable(&(yypvt[-0]));
}
yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 337:
# line 1737 "fortran.y"
{
yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 338:
# line 1741 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_actual_arg(&(yypvt[-0]));
use_variable(&(yypvt[-0]));
}
yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 339:
# line 1749 "fortran.y"
{
yyval.next_token = append_token(yypvt[-3].next_token,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 340:
# line 1756 "fortran.y"
{
do_RETURN(current_module_hash,&(yypvt[-1]));
} /*NOTREACHED*/ break;
case 341:
# line 1760 "fortran.y"
{
do_RETURN(current_module_hash,&(yypvt[-2]));
} /*NOTREACHED*/ break;
case 342:
# line 1771 "fortran.y"
{
if( ! is_true(CONST_EXPR,yypvt[-0].subclass) ) {
syntax_error(
yypvt[-0].line_num,yypvt[-0].col_num,
"constant expression expected");
}
else if( ! is_const_type(yypvt[-0].class) ){
syntax_error(
yypvt[-0].line_num,yypvt[-0].col_num,
"arithmetic, char, or logical expression expected");
}
} /*NOTREACHED*/ break;
case 343:
# line 1787 "fortran.y"
{
if(debug_parser) {
fprintf(list_fd,
"\nexpr: class=0x%x subclass=0x%x",
yypvt[-0].class,
yypvt[-0].subclass);
}
} /*NOTREACHED*/ break;
case 345:
# line 1800 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 346:
# line 1805 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 348:
# line 1814 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 350:
# line 1823 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 352:
# line 1832 "fortran.y"
{
unexpr_type(&(yypvt[-1]),&(yypvt[-0]),&(yyval));
} /*NOTREACHED*/ break;
case 354:
# line 1840 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 356:
# line 1850 "fortran.y"
{
unexpr_type(&(yypvt[-1]),&(yypvt[-0]),&(yyval));
} /*NOTREACHED*/ break;
case 357:
# line 1854 "fortran.y"
{
unexpr_type(&(yypvt[-1]),&(yypvt[-0]),&(yyval));
} /*NOTREACHED*/ break;
case 358:
# line 1858 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 359:
# line 1863 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 361:
# line 1872 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
if(div_check &&
!is_true(CONST_EXPR,yypvt[-0].subclass)){
warning(yypvt[-1].line_num,yypvt[-1].col_num,
"Possible division by zero");
}
} /*NOTREACHED*/ break;
case 362:
# line 1882 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 364:
# line 1891 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 366:
# line 1900 "fortran.y"
{
binexpr_type(&(yypvt[-2]),&(yypvt[-1]),&(yypvt[-0])
,&(yyval));
} /*NOTREACHED*/ break;
case 367:
# line 1907 "fortran.y"
{
DBGstr(primary<--id=,token_name(yypvt[-0]));
} /*NOTREACHED*/ break;
case 370:
# line 1915 "fortran.y"
{
make_true(CONST_EXPR,yyval.subclass);
make_true(NUM_CONST,yyval.subclass);
} /*NOTREACHED*/ break;
case 371:
# line 1920 "fortran.y"
{
DBGstr(primary<--str=,yypvt[-0].value.string)
yyval.class = type_byte(class_VAR,type_STRING);
yyval.subclass = 0;
make_true(CONST_EXPR,yyval.subclass);
} /*NOTREACHED*/ break;
case 372:
# line 1927 "fortran.y"
{
DBGstr(primary<--h=,yypvt[-0].value.string)
yyval.class = type_byte(class_VAR,type_HOLLERITH);
yyval.subclass = 0;
make_true(CONST_EXPR,yyval.subclass);
if(port_check) {
warning(yypvt[-0].line_num,yypvt[-0].col_num,
"hollerith constant may not be portable");
}
} /*NOTREACHED*/ break;
case 373:
# line 1938 "fortran.y"
{
DBGstr(primary<--log=,yypvt[-0].value.string)
yyval.class = type_byte(class_VAR,type_LOGICAL);
yyval.subclass = 0;
make_true(CONST_EXPR,yyval.subclass);
} /*NOTREACHED*/ break;
case 374:
# line 1945 "fortran.y"
{
yyval = yypvt[-1];
} /*NOTREACHED*/ break;
case 375:
# line 1951 "fortran.y"
{
yyval.class = type_byte(class_VAR,type_INTEGER);
yyval.subclass = 0;
} /*NOTREACHED*/ break;
case 376:
# line 1956 "fortran.y"
{
yyval.class = type_byte(class_VAR,type_REAL);
yyval.subclass = 0;
} /*NOTREACHED*/ break;
case 377:
# line 1961 "fortran.y"
{
yyval.class = type_byte(class_VAR,type_DP);
yyval.subclass = 0;
} /*NOTREACHED*/ break;
case 378:
# line 1966 "fortran.y"
{
yyval.class = type_byte(class_VAR,type_COMPLEX);
yyval.subclass = 0;
} /*NOTREACHED*/ break;
case 379:
# line 1974 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_variable(&(yypvt[-0]));
}
if(datatype_of(yypvt[-0].class) != type_INTEGER) {
syntax_error(
yypvt[-0].line_num,yypvt[-0].col_num,
"expression must be integer type");
}
} /*NOTREACHED*/ break;
case 380:
# line 1988 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_variable(&(yypvt[-0]));
}
{
int t=datatype_of(yypvt[-0].class);
if(t != type_INTEGER && t != type_REAL
&& t != type_DP ) {
syntax_error(
yypvt[-0].line_num,yypvt[-0].col_num,
"expression must be integer, real, or double precision type");
}
}
} /*NOTREACHED*/ break;
case 381:
# line 2008 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_variable(&(yypvt[-0]));
}
if( ! is_true(CONST_EXPR,yypvt[-0].subclass) ) {
syntax_error(
yypvt[-0].line_num,yypvt[-0].col_num,
"constant expression expected");
}
else
if(datatype_of(yypvt[-0].class) != type_INTEGER){
syntax_error(
yypvt[-0].line_num,yypvt[-0].col_num,
"integer expression expected");
}
} /*NOTREACHED*/ break;
case 382:
# line 2029 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_variable(&(yypvt[-0]));
}
if( datatype_of(yypvt[-0].class) != type_INTEGER ){
syntax_error(
yypvt[-0].line_num,yypvt[-0].col_num,
"integer dimension expected");
yyval.value.integer = 0;
}
else {
if( is_true(CONST_EXPR,yypvt[-0].subclass) )
yyval.value.integer =
int_expr_value(&(yypvt[-0]));
else /* must be dummy */
yyval.value.integer = 0;
}
} /*NOTREACHED*/ break;
case 383:
# line 2055 "fortran.y"
{
if( is_true (ARRAY_ID_EXPR, yypvt[-3].subclass)){
ref_array(&(yypvt[-3]),&(yypvt[-1]));
if(debug_parser)
print_exprlist("array lvalue",&(yypvt[-1]));
/* array now becomes scalar */
make_false(ARRAY_ID_EXPR,yyval.subclass);
}
else { /* statement-function */
if(stmt_sequence_no > seq_stmt_fun) {
syntax_error(
yypvt[-3].line_num, NO_COL_NUM,
"statement out of order");
}
def_stmt_function(&(yypvt[-3]),&(yypvt[-1]));
/* remake token info */
primary_id_expr(&(yypvt[-3]),&(yyval));
if(debug_parser)
print_exprlist("stmt function",&(yypvt[-1]));
}
} /*NOTREACHED*/ break;
case 384:
# line 2078 "fortran.y"
{
if( is_true(ARRAY_ID_EXPR,yypvt[-3].subclass) ) {
ref_array(&(yypvt[-3]),&(yypvt[-1]));
if(debug_parser)
print_exprlist("array",&(yypvt[-1]));
/* array now becomes scalar */
make_false(ARRAY_ID_EXPR,yyval.subclass);
}
else {
call_func(&(yypvt[-3]),&(yypvt[-1]));
/* remake token info */
func_ref_expr(&(yypvt[-3]),&(yypvt[-1])
,&(yyval));
if(debug_parser)
print_exprlist("function",&(yypvt[-1]));
}
} /*NOTREACHED*/ break;
case 385:
# line 2099 "fortran.y"
{
yyval.class = 0;
yyval.next_token = NULL;
} /*NOTREACHED*/ break;
case 387:
# line 2107 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_var_as_subscr(&(yypvt[-0]));
}
yyval.next_token = append_token((Token*)NULL,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 388:
# line 2114 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-0].subclass)){
use_var_as_subscr(&(yypvt[-0]));
}
yyval.next_token = append_token(yypvt[-2].next_token,&(yypvt[-0]));
} /*NOTREACHED*/ break;
case 394:
# line 2133 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-2].subclass)){
use_variable(&(yypvt[-2]));
}
} /*NOTREACHED*/ break;
case 395:
# line 2139 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-1].subclass)){
use_variable(&(yypvt[-1]));
}
} /*NOTREACHED*/ break;
case 396:
# line 2145 "fortran.y"
{
if(is_true(ID_EXPR,yypvt[-3].subclass)){
use_variable(&(yypvt[-3]));
}
if(is_true(ID_EXPR,yypvt[-1].subclass)){
use_variable(&(yypvt[-1]));
}
} /*NOTREACHED*/ break;
case 397:
# line 2160 "fortran.y"
{
ref_variable(&(yypvt[-0]));
primary_id_expr(&(yypvt[-0]),&(yyval));
} /*NOTREACHED*/ break;
case 406:
# line 2189 "fortran.y"
{
yyval.class = type_byte(class_LABEL,type_LABEL);
yyval.subclass = 0;
} /*NOTREACHED*/ break;
}
goto yystack; /* reset registers in driver code */
}